/**
 * FileName：ServiceProvider.java
 * Date：2010-12-4
 * User: heng.dong
 */
package com.smileus.integration.provider;

import javax.jws.WebParam;
import javax.jws.WebService;

/**
 *1.ServiceProvider：对外提供服务，每个子系统仅需一个ServiceProvider实现即可，
 * 接口实现可以有cxf、hessian、XMLRPC等多种 方式；
 * 
 *2.运行时根据serviceId来确定具体的的业务逻辑处理。
 * 
 */
// com/smileus/integration/provider
@WebService(name = "cxfService", targetNamespace = ServiceProvider.NS)
public interface ServiceProvider extends Lifecycle {
	String NS = "http://provider.integration.smileus.com";

	/**
	 *1. 每个子系统有自己的ServiceProvider；
	 * 
	 *2. 发布服务，同时告诉监控系统，当前机器服务已处于服务中状态；
	 * 
	 * @param ServiceProvider
	 * @return void
	 */
	public void start();

	/**
	 * tasks格式：[{"sId:userService.add,ps:[param1,param2]",seq:123}]
	 * @param ServiceProvider
	 * @return String
	 */
	public String doBatch(@WebParam(name = "tasks") String tasks);
	/**
	 * serviceId形式如：userService.add，userService为当前机器上spring bean
	 * id，add为当前bean的方法；
	 * 
	 * param：调用接口入参，建议每一个具体服务的入参均为JSON字符串格式，这样可简化接口设计
	 * 
	 * @param ServiceProvider
	 * @return String
	 */
	public String doService(@WebParam(name = "serviceId") String serviceId, @WebParam(name = "param") String param);

	/**
	 * 集群服务刷新
	 * 
	 * @param ServiceProvider
	 * @return void
	 */
	public void clusterRefresh();

	/**
	 * 停止当前机器的服务
	 * 
	 * @param ServiceProvider
	 * @return void
	 */
	public void stop();

	/**
	 * 是否为运行状态
	 */
	boolean isRunning();
}
